package operator;

/**
 * 逻辑运算符(&& & || ! ^)
 */
public class LogicOperator {

    public static void main(String[] args) {

        //短路与&& 和 &的区别
        int age = 50;
        if (age  > 20 && age < 90) {
            System.out.println("ok100");
        }

        if (age > 20 & age < 90) {
            System.out.println("ok200");
        }

        //区别：对于&&短路与而言，如果第一个条件为false,后面的条件不再判断，效率高
        //对于&逻辑与而言，如果第一个条件为false,后面的条件仍然会判断，效率低
        int a = 4;
        int b = 9;
        if(a < 1 & ++b < 50) {
            System.out.println("ok300");
        }
        System.out.println("a=" + a + " b=" + b);// 4 10

        //1) ||短路或：如果第一个条件为true，则第二个条件不会判断，最终结果为true，效率高
        //2) |逻辑或：不管第一个条件是否为true，第二个条件都要判断，效率低
        //3) 开发中基本使用||

        //!操作是取反T->F ,F->T
        System.out.println(60 > 20);//T
        System.out.println(!(60 > 20));//F
        //a^b:叫逻辑异或，当a和b不同时，则结果为true,否则为false
        boolean c = (10 > 1) ^ (3 > 5);
        System.out.println("c=" + c);//T

        //逻辑异或 a^b，当a和b不同时，则结果为true，否则为false
        System.out.println((4 < 1) ^ (4 > 1));//T
    }



}

